package cn.tedu.ivos.base.annotation;

import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;

/**
 * <p>
 * {@link IntegerOnly} 是一个自定义的字段校验注解，用于验证目标字段是否为合法的整数类型。
 * </p>
 *
 * <p>
 * 该注解可以用于以下场景：
 * - 字段是 {@link Integer} 类型；
 * - 字段是字符串（如 "123"），但内容能被解析为整数；
 * - 字段不能是浮点数或非法字符（如 "abc", "12.3"）。
 * </p>
 *
 * <p>
 * 示例用法：
 * <pre>
 * public class DictAddParam {
 *
 *     &#64;IntegerOnly(message = "排序必须为整数")
 *     private Object sort; // 可以是 String 或 Integer
 * }
 * </pre>
 * </p>
 */
@Documented
@Constraint(validatedBy = IntegerOnlyValidator.class) // 指定对应的校验器
@Target({ ElementType.FIELD }) // 表示只能作用于字段上
@Retention(RetentionPolicy.RUNTIME) // 运行时有效，便于框架读取
public @interface IntegerOnly {

    /**
     * 校验失败时返回的默认错误信息
     */
    String message() default "必须为整数";

    /**
     * 用于分组校验，通常不需要修改
     */
    Class<?>[] groups() default {};

    /**
     * 用于扩展校验规则的负载信息，通常不需要修改
     */
    Class<? extends Payload>[] payload() default {};
}
